package main

import (
	"context"
	"demo_system/config"
	"demo_system/fronted/web/route"
	db2 "demo_system/lib/db"
	"github.com/kataras/iris"
	"github.com/kataras/iris/view"
	"log"
)

func main() {
	//1.生成iris实例
	app := iris.New()
	//2.设置日志等级
	envConfig := config.NewConfig(&config.EnvConfig{}, "env").(*config.EnvConfig)
	if envConfig.Env == "" {
		app.Logger().SetLevel("debug")
	} else {
		app.Logger().SetLevel(envConfig.Env)
	}
	//3.注册html模板
	var template *view.HTMLEngine
	if envConfig.Env == "debug" {
		template = iris.HTML("./fronted/web/views", ".html").Layout("shared/layout.html").Reload(true) // .Reload 热加载
	} else {
		template = iris.HTML("./fronted/web/views", ".html").Layout("shared/layout.html").Reload(false) // .Reload 热加载
	}
	app.RegisterView(template)

	// 4.设置静态文件目录
	app.StaticWeb("/public", "./fronted/web/public") // 参数1:url前缀,参数二本地地址

	// 5.设置异常页面
	app.OnAnyErrorCode(func(ctx iris.Context) {
		ctx.ViewData("message", ctx.Values().GetStringDefault("message", "访问页面出错"))
		ctx.ViewLayout("")
		ctx.View("shared/error.html")
	})

	ctx, cancel := context.WithCancel(context.Background())



	defer cancel()
	//连接数据库
	db, err := db2.NewMysqlConn()

	// 6.注册控制器
	router := route.NewRouter(app, db, ctx)
	router.RegRouter()


	// 7.启动服务
	err = app.Run(
		iris.Addr(":8082"),                            // 地址
		iris.WithCharset("UTF-8"),                     // 国际化
		iris.WithOptimizations,                        // 自动优化
		iris.WithoutServerError(iris.ErrServerClosed), // 忽略框架错误
	)

	if err != nil {
		log.Println(err.Error())
		panic(err.Error())
	}
}
